package com.qumitech.visualnovel.service.account;

import com.qumitech.visualnovel.model.dao.console.AccountDailyActive;
import com.qumitech.visualnovel.model.dao.console.AccountGroupConfig;

import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 消息推送/添加系统消息用户分组
 *
 * @author zhangbc
 * @version 1.0.0
 * @date 2020/7/17 15:42
 **/
public interface AccountGroupService {

    /**
     * 获取所有用户分组信息
     * @return 用户分组信息
     */
    List<HashMap<String,Object>> getAccountGroups();

    /**
     * 查询列表
     * @param levelId 分组编号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param offset 偏移量
     * @param pageSize 页大小
     * @return 列表信息
     */
    List<AccountGroupConfig> listAccountGroupInfoData(Integer levelId, String startTime, String endTime,
                                                      int offset, int pageSize);

    /**
     * 获取数据总量
     * @param levelId 分组编号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 数据总量
     */
    int getCount(Integer levelId, String startTime, String endTime);

    /**
     * 根据分组获取用户ID
     * @param userGroup 分组编号
     * @return 所有ID
     */
    List<Integer> getUserIds(Integer userGroup);

    /**
     * 获取分组信息
     * @param userGroup 分组编号
     * @param size 组大小
     * @return 用户ID
     */
    List<String> getGroups(Integer userGroup, int size);

    /**
     * 根据ID获取分组信息
     * @param id 分组ID
     * @return 分组信息
     */
    AccountGroupConfig findGroupConfigById(Long id);

    /**
     * 查询活跃用户列表
     * @param groupId 分组编号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param offset 偏移量
     * @param pageSize 页大小
     * @return 列表信息
     */
    List<AccountDailyActive> listAccountDailyActive(Integer groupId, String startTime, String endTime,
                                                      int offset, int pageSize);

    /**
     * 获取跃用户数据总量
     * @param groupId 分组编号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 数据总量
     */
    int getAccountActiveCount(Integer groupId, String startTime, String endTime);

    /**
     * 导出活跃用户列表
     * @param groupId 分组编号
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @param offset 偏移量
     * @param pageSize 页大小
     * @return 列表信息
     */
    Map<String, Object> listGroupActiveInfoExport(Integer groupId, String startTime, String endTime,
                                                  Integer offset, Integer pageSize, HttpServletResponse response);
}
